package cl.ccs.migracionbcmc.util;

import java.text.DecimalFormat;

import java.util.Date;
import java.util.Locale;

public class Util {

    public Util() {
        super();
    }

    /**
     * @param rut
     * @return
     */
    public static String formatRUT(String rut) {
        if (rut == null) {
            return " ";
        }
        String ceros = "";
        int diff = 11 - rut.length();
        for (int i = 0; i < diff; i++) {
            ceros += "0";
        }

        return ceros + rut.toUpperCase();
    }

    /**
     * @param rut
     * @return
     */
    public static String formatDotRUT(String rut) {

        char dvRut = rut.charAt(rut.indexOf('-') + 1);
        rut = rut.substring(0, rut.indexOf('-'));

        long number = Long.parseLong(rut);
        rut = String.valueOf(number);

        String result = "";
        while (rut.length() > 3) {
            result = "." + rut.substring(rut.length() - 3) + result;
            rut = rut.substring(0, rut.length() - 3);
        }
        result = rut + result + "-" + dvRut;
        return result.toUpperCase();
    }

    /**
     * @param nroOperacion
     * @return
     */
    public static String format4Zero(String nroOperacion) {
        if (nroOperacion == null) {
            return " ";
        }
        String ceros = "";
        int diff = 4 - nroOperacion.length();
        for (int i = 0; i < diff; i++) {
            ceros += "0";
        }

        return ceros + nroOperacion.toUpperCase();
    }

    /**
     * @param fecha
     * @return
     */
    public static boolean isBlankDate(Date fecha) {

        return Constantes.FMT_DATE.format(fecha).equals(Constantes.DATE_BLANK);

    }

    /**
     * @param rut
     * @return
     */
    public static boolean isRutJuridico(String rut) {
        if (rut == null || rut.length() < 3) {
            return false;
        }

        int initial = Integer.parseInt(rut.substring(0, rut.length() - 2));
        if (initial < 50000000) {
            return false;
        } else {
            return true;
        }
    }

    /**
     * @param rut
     * @return
     */
    public static boolean validateFormatRut(String rut) {
        rut = rut.trim();
        if (rut.matches("[0-9]+-[0-9kK]{1}$")) {
            return true;
        }
        return false;
    }


    /**
     * @param rut
     * @return
     */
    public static boolean validateDVRut(String rut) {
        rut = rut.trim();
        long digito, resultado;
        long suma = 0;
        long factor = 2;
        char dvRut;


        rut = rut.toUpperCase();
        long numRut = Long.parseLong(rut.substring(0, rut.indexOf('-')));
        dvRut = rut.charAt(rut.indexOf('-') + 1);

        for (; numRut != 0; ) {
            digito = numRut % 10;
            numRut /= 10;
            suma += digito * factor;
            if (factor++ >= 7) {
                factor = 2;
            }
        }

        resultado = 11 - (suma % 11);

        char dvCalculado = 0;
        if (resultado < 10) {
            dvCalculado = Long.toString(resultado).charAt(0);
        } else if (resultado == 10) {
            dvCalculado = 'K';
        } else if (resultado == 11) {
            dvCalculado = '0';
        }

        if (dvRut != dvCalculado) {
            return false;
        }

        return true;
    }

    public static String formatDotMiles(String monto) {
        if (monto == null) {
            return "";
        }
        double val = Double.parseDouble(monto);
        Locale.setDefault(Locale.US);
        DecimalFormat num = new DecimalFormat("###,###,###.##");
        return num.format(val);
    }
}
